package model;

import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.net.URL;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JLabel;

public class Enemy {
	
	/**
	 * Posicion sobre el eje x relativo a la ventana principal
	 */
	private int x;
	
	/**
	 * Posicion sobre el eje y relativo a la ventana principal
	 */
	private int y;
	
	/**
	 * Velocidad con la que se aproxima al jugador
	 */
	private int speed;
	
	/**
	 * Salud del enemigo. Cada impacto reduce su vida en 1.
	 */
	private int health;
	
	private JLabel lb;
	
	private Rectangle rect;
	
	public Enemy(Dimension screenDim){
		Random r = new Random();
		int a = r.nextInt(4);
		if(a == 0){ // Aparece por arriba
			y = 0;
			x = r.nextInt(screenDim.width);
		}else if(a == 1){ // Aparece por debajo
			y = screenDim.height;
			x = r.nextInt(screenDim.width);
		}else if(a == 2){ // Aparace por la derecha
			y = r.nextInt(screenDim.height);
			x = screenDim.width;
		}else if(a == 3){ // Aparece por la izquierda
			y = r.nextInt(screenDim.height);
			x = 0;
		}
		
		health = r.nextInt(4)+1; // de 1 a 4
		
		speed = r.nextInt(10)+3; // de 1 a 13
		URL u = getClass().getResource("/data/images/zombie.png");
		//String u = "./data/images/zombie.png";
		lb = new JLabel(new ImageIcon(u));
		lb.setBounds(x,y,30,30);
		rect = new Rectangle(x, y, lb.getIcon().getIconWidth(), lb.getIcon().getIconHeight());
	}
	
	public void reduceHealth(){
		health--;
	}
	
	public void advance(int x0, int y0){
		double angle =  Math.atan2(y0, x0);
		x -= (x-x0 != 0)?((x-x0)/Math.abs(x-x0))*speed*Math.cos(angle):0;
		y -= (y-y0 != 0)?((y-y0)/Math.abs(y-y0))*speed*Math.sin(angle):0;
		rect.x = x;
		rect.y = y;
		lb.setBounds(x,y,30,30);
	}
	
	public JLabel getLabel(){
		return lb;
	}
	
	public int getX(){
		return x;
	}
	
	public int getY(){
		return y;
	}

	public String toString(){
		return "Enemy["+x+","+y+"]";
	}
	
	public boolean contains(Point p){
		return rect.contains(p);
	}
}
